PowerShellGet v3(PSResourceGet)の現在について – 2023年7月時点
しばたです。
2019年に現在のPowerShellGetのメジャーバージョンアップとなるPowerShellGet v3に関する記事を書きました。
その後まだPowerShellGet v3はリリースされていないのですが、いろいろ変った点があるので本記事で解説してこうと思います。
PowerShellGet から PSResourceGet へ
PowerShellGet v3は定期的にベータ版が更新されており、直近ではベータ21までリリースされていました。
今年の5月末にGitHub上に以下のIssueが起票され、モジュール名をPowerShellGet
からPSResourceGet
に変えることになりました。
割と急な話なのですが、理由としてはPowerShell 7.4のリリース時にPowerShellGet 2系と3系の両方を同梱する都合名前を分ける必要があった様です。
別件で「Microsoft公式のPowerShellモジュールはMicrosoft.PowerShell
のプレフィックスを付けるべき」という議論があり、その影響を受け「Microsoft.PowerShell.PSResourceGet
」が現在の正式なモジュール名となっています。
- PowerShell Gallery : Microsoft.PowerShell.PSResourceGet
- なお、PSResourceGet モジュールもGallery上は存在するが全バージョン非公開となり実質廃止ずみ
PSResourceGet
モジュールの細かい話についてはこちらの記事をご覧ください。
PowerShellへの同梱について
先述の通りPSResourceGet(Microsoft.PowerShell.PSResourceGet
)は次のLTSリリースとなるPowerShell 7.4に同梱される予定です。
PowerShell 7.4では
- PowerShellGet v2.2.5
- Microsoft.PowerShell.PSResourceGet v3.0.x
の2つのモジュールが利用可能になり、順次PSResourceGetへ移行していく形となります。
そしてPowerShell 7.5ではCompatPowerShellGetモジュールをPowerShellGet v3として提供する予定となっています。
このCompatPowerShellGetはPowerShellGet v2と互換性のあるコマンドレットを提供するものの、実体としてはPSResourceGetを呼び出すラッパーモジュールとなります。
これにより最終的にPowerShell 7.5では
- PowerShellGet v3.0.x (= CompatPowerShellGet) → 実体は Microsoft.PowerShell.PSResourceGet
- Microsoft.PowerShell.PSResourceGet v3.0.x
という形になる予定です。
より細かい話はこちらの記事をご覧ください。
補足 : Windows PowerShell対応
現在Windows PowerShell環境ではPowerShellGet 1.0.0.1[1]が使われ続けていますが、将来的にはWindows PowerShell環境にもPSResourceGetを同梱しデフォルトで利用可能にしたい様です。
こちらについて現時点では具体的な日程などは決まっていません。
GitHubリポジトリ
改めて各モジュールのGitHubリポジトリを整理しておきます。
- PowerShell/PSResourceGet : かつてのPowerShellGet v3でありPowerShellGetの後継
- PowerShell/PowerShellGetv2 : 現在のPowerShellGet v2系
- PowerShell/CompatPowerShellGet : PowerShellGet v2互換のラッパーモジュール
試してみた
ここからは簡単に動作確認してみます。
PSResourceGetはPowerShell 5.1以降であれば動作するので、今回は私の開発機(Windows 11)上のPowerShell 7.3.6を検証環境にします。
C:\> $PSVersionTable | Select-Object PSVersion, OS
PSVersion OS
--------- --
7.3.6 Microsoft Windows 10.0.22621
PSResouceGetはPowerShellGet v2系の環境からであればInstall-Module
コマンドを使ってインストールします。
本日時点ではまだ正式リリース前のため-AllowPrerelease
オプションを指定してやる必要があります。
# 従来のPowerShellGetを使っている環境の場合
Install-Module -Name Microsoft.PowerShell.PSResourceGet -AllowPrerelease
既にPowerShellGet v3のベータ版を使っている場合は以下の様にInstall-PSResource
を使っても構いません。
# PowerShellGet v3ベータ版をインストール済みの場合
Install-PSResource Microsoft.PowerShell.PSResourceGet -Prerelease
本日時点ではVer.0.5.22-beta22が提供されており、Ver.0.5をベースにこれまでのベータ21を引き継ぎベータ22としている様です。
# PowerShellGet v3 ベータ21 から PSResourceGet ベータ22 に
C:\> Get-InstalledModule Microsoft.PowerShell.PSResourceGet
Version Name Repository Description
------- ---- ---------- -----------
0.5.22-beta22 Microsoft.PowerShell.PSResourceGet PSGallery PowerShell module with commands for disc…
利用可能なコマンドレットは以下の通りです。
C:\> Get-Command -Module Microsoft.PowerShell.PSResourceGet
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Find-PSResource 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Get-InstalledPSResource 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Get-PSResourceRepository 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Get-PSScriptFileInfo 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Install-PSResource 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet New-PSScriptFileInfo 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Publish-PSResource 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Register-PSResourceRepository 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Save-PSResource 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Set-PSResourceRepository 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Test-PSScriptFileInfo 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Uninstall-PSResource 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Unregister-PSResourceRepository 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Update-PSModuleManifest 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Update-PSResource 0.5.22 Microsoft.PowerShell.PSResourceGet
Cmdlet Update-PSScriptFileInfo 0.5.22 Microsoft.PowerShell.PSResourceGet
各コマンドレット自体は最初にRFCが公開された時から大きく変わっていませんでした。
当初予定されていたUpdate-PSResourceCache
が未実装だったのと公開スクリプトを取り扱うGet-PSScriptFileInfo
, New-PSScriptFileInfo
, Test-PSScriptFileInfo
, Update-PSScriptFileInfo
がPowerShellGet同様に引き継がれているのが大きく異なるところでしょうか。
あとはざっくり以下の対比でコマンドを使っていく感じになります。
コマンド毎のパラメーターにも細かい違いや新機能はあるのですが本記事では割愛します。
PowerShellGet v2 (2.2.5) | PSResouceGet (0.5-beta.22) | 備考 |
---|---|---|
Find-Command | Find-PSResource -CommandName | |
Find-DscResource | Find-PSResource -DscResourceName | |
Find-Module | Find-PSResource -Type Module | Find-PSResource -Nameでも可 |
Find-RoleCapability | - | PSResouceGetでは意図して削除している模様 |
Find-Script | Find-PSResource -Type Script | |
Get-CredsFromCredentialProvider | - | 代替コマンド無し : 参考 |
Get-InstalledModule | Get-InstalledPSResource | |
Get-InstalledScript | Get-InstalledPSResource | |
Get-PSRepository | Get-PSResourceRepository | |
Install-Module | Install-PSResource | |
Install-Script | Install-PSResource | |
New-ScriptFileInfo | New-PSScriptFileInfo | |
Publish-Module | Publish-PSResource | |
Publish-Script | Publish-PSResource | |
Register-PSRepository | Register-PSResourceRepository | |
Save-Module | Save-PSResource | |
Save-Script | Save-PSResource | |
Set-PSRepository | Set-PSResourceRepository | |
Test-ScriptFileInfo | Test-PSScriptFileInfo | |
- | Get-PSScriptFileInfo | PSResouceGetのみ : 参考 |
Uninstall-Module | Uninstall-PSResource | |
Uninstall-Script | Uninstall-PSResource | |
Unregister-PSRepository | Unregister-PSResourceRepository | |
Update-Module | Update-PSResource | |
Update-ModuleManifest | Update-PSModuleManifest | |
Update-Script | Update-PSResource | |
Update-ScriptFileInfo | Update-PSScriptFileInfo |
簡単な例としてFind-Module
とFind-PSResource
を比較表示してみるとこんな感じです。
Find-PSResource
では表示順が「名前」「バージョン」「プレリリース」と改善され、また新たに増えた「プレリリース」にも対応していることが見て取れます。
最後に
以上となります。
PowerShell 7.4のリリースがもう少し先(.NET 8がGAする2023年11月ごろ)なのでPSResouceGetの仕様もまだ変わるかもしれません。
大きな変化があれば改めて記事を書きたいと思います。
バージョンは変わらないが微妙に内容は更新されている模様... ↩︎